package top.pmwly.common.utils;

import org.springframework.beans.BeanUtils;
import top.pmwly.common.domain.vo.MenuVo;
import top.pmwly.dao.pojo.SysMenu;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Herther
 * @version 1.0.0
 * @ClassName TreeUtils.java
 * @Description 菜单遍历树工具
 * @createTime 2021年09月22日 01:03:00
 */
public class TreeUtils {

    private List<MenuVo> menuVos;



    /**
     * 构造器给menuVos 赋值
     * @param sysMenus
     */
    public TreeUtils(List<SysMenu> sysMenus){
        Convert(sysMenus);
    }

    /**
     * menu转换
     * @param sysMenu
     */
    private void Convert(List<SysMenu> sysMenu){
        ArrayList<MenuVo> menuVos = new ArrayList<>();
        for (SysMenu menu : sysMenu){
            MenuVo menuVo = new MenuVo();
            BeanUtils.copyProperties(menu, menuVo);
            menuVos.add(menuVo);
        }

        this.menuVos =menuVos;

    }

    //获取根节点
    private List<MenuVo> getNodeId(){
        List<MenuVo> getNodeList =new ArrayList<MenuVo>();
        for (MenuVo menuNode: menuVos) {
            if (menuNode.getParentId().longValue()==0){
                getNodeList.add(menuNode);
            }
        }
        return getNodeList;
    }
    //递归建立子树
    private MenuVo builderChiltree(MenuVo menuVo){
        List<MenuVo> childernList = new ArrayList<MenuVo>();
        for (MenuVo childern:menuVos) {
            if (childern.getParentId().longValue()==menuVo.getMenuId().longValue()){
                childernList.add(builderChiltree(childern));
            }
        }

        menuVo.setChildren(childernList);
        return menuVo;
    }
    //建立整棵树
    public List<MenuVo> builderTree(){
        List<MenuVo> menus = new ArrayList<>();
        for (MenuVo menu:getNodeId()){
            menu = builderChiltree(menu);
            menus.add(menu);
        }
        return menus;
    }


    ///**
    // * 构造器给nodeList 赋值
    // * @param sysMenus
    // */
    //public TreeUtils(List<SysMenu> sysMenus){
    //    this.sysMenus= sysMenus;
    //}
    //
    ////获取根节点
    //private List<MenuVo> getNodeId(){
    //    List<MenuVo> getNodeList =new ArrayList<MenuVo>();
    //    for (SysMenu menu: sysMenus) {
    //        if (menu.getParentId().longValue()==0){
    //            getNodeList.add((MenuVo) menu);
    //        }
    //    }
    //    return getNodeList;
    //}
    ////递归建立子树
    //private MenuVo builderChildren(SysMenu sysMenu){
    //    List<MenuVo> childernList = new ArrayList<MenuVo>();
    //    for (SysMenu childern: sysMenus) {
    //        if (childern.getParentId().longValue() == menuVo.getMenuId().longValue()){
    //            childernList.add(builderChildren(childern));
    //        }
    //    }
    //
    //    menuVo.setChildren(childernList);
    //    return node;
    //}
    ///**
    // *  建立整棵树
    // */
    //public  List<MenuVo> builderTree(){
    //    List<MenuVo> menuVos = new ArrayList<>();
    //    for (SysMenu menu: getNodeId()){
    //        //建立子树
    //        MenuVo menuVo = builderChildren(menu);
    //        menuVos.add(menuVo);
    //    }
    //}

}
